package _Banque._TUN;

import _Banque.*;
import _Exception.IPException;
import _Tests.Tests;

//
//IUT de Nice / Departement informatique / Module APO-C++
//Annee 2008_2009 - Package _Banque
//
//Classe CompteEpargne - Tests unitaires du mecanisme RTTI
//                     (Cas nominaux)
//
//Auteur : T.Tran Van Thoan - Q.Salmeron
//

public class T_CompteEpargne_N6 {

		public static void main (String args[]) throws IPException {
			
			Tests.Begin("_Banque.CompteEpargne", "1.5.0");
			
			Banque b = new Banque();
			
				String adresse= "Villa Beau Sejour, 115 Av. de la Grande Armee - PARIS (75000)";
				Titulaire durand = new Titulaire("Durand", "Paul", "1981/01/03",  adresse);
			 
			      	Tests.Design("Controle du mecanisme RTTI", 3); {
			      	
			      	Tests.Case("Cas natif (aucun transtypage)"); {     
			            CompteEpargne pCompte= new CompteEpargne(b, durand, 0.05f);
			              
			               Tests.Unit("_Banque.CompteEpargne", pCompte.getClass().getName());
			               Tests.Unit(4000001, pCompte.getNumeroCompte());
			            }
			      	
			      	Tests.Case("Cas avec transtypage dans la classe mere"); {     
			            CompteBancaire pCompte= new CompteEpargne(b, durand, 0.05f);
			              
			               Tests.Unit("_Banque.CompteEpargne", pCompte.getClass().getName());
			               Tests.Unit(4000002, ((CompteEpargne)pCompte).getNumeroCompte());
			            }
			      	
			      	Tests.Case("Cas avec transtypage dans un pointeur banalise"); {     
			            Object pCompte= (Object)new CompteEpargne(b, durand, 0.05f);
			              
			               Tests.Unit("_Banque.CompteEpargne", pCompte.getClass().getName());
			               Tests.Unit(4000003, ((CompteEpargne)pCompte).getNumeroCompte());
			            }
			      	
			      	}
			      	
			      	Tests.Design("Controle de validite des transtypages", 3); {
			      		
			      		Tests.Case("Cas avec une classe soeur"); {     
			      	         CompteEpargne  pCpt1= new CompteEpargne(b, durand, 0.05f);
			      	         //CompteBancaire pCpt2= new CompteBancaire(durand);
			      	         //CompteCourant  pCpt3= new CompteCourant(durand);

			      	            Tests.Unit(true,  (CompteBancaire)pCpt1 != null);
			      	            //Tests.Unit(false, (pCpt2) instanceof CompteEpargne);
			      	            //Tests.Unit(false, (CompteEpargne)pCpt2 != null);	Cast pas possible
			      	            //Tests.Unit(false, (pCpt3) instanceof CompteEpargne); Il me fout une erreur ici
			      	            //Tests.Unit(false, (CompteEpargne)pCpt3 != null);	Cast pas possible
			      	            Tests.Unit(4000004, pCpt1.getNumeroCompte());
			      	         } 
			      		
			      		Tests.Case("Controle du transtypage dans une classe soeur !!!"); {     
			      	         //Object pCompte= new CompteEpargne(durand, 0.05f);
			      	         CompteCourant pW = new CompteCourant();
			      	           
			      	          	//pW= (CompteCourant)pCompte; 		Cast pas possible
			      	            Tests.Unit("_Banque.CompteCourant", pW.getClass().getName());
			      	            //Tests.Unit(4000005, ((CompteEpargne)pW).getNumeroCompte());	Cast pas possible
			      	         }
			      	}
			 Tests.End();
		}
}
